const api = require('../../utils/api');
const { IMG_URL } = require('../../utils/request');

Page({
  data: {
    documents: [],
    showActionSheet: false,
    currentDocId: null,
    currentDocTitle: '',
    showRenameModal: false,
    loadingMore: false,
    hasMoreData: true,
    pageNum: 1,
    pageSize: 10,
    tabType: 'create', // 'create' 表示我发起的，'participate' 表示我参与的
    tabName: '我发起的',
    emptyTips: {
      create: {
        title: '您还没有发起文档',
        text: '去首页上传第一份文档，开启您的电子签名'
      },
      participate: {
        title: '您还没有参与任何文档',
        text: '等待他人邀请您参与签名'
      }
    }
  },

  onLoad(options) {
    // 页面加载时执行
    // 根据options参数确定显示哪种类型的文档列表
    const tabType = options.type || 'create';
    const tabName = tabType === 'create' ? '我发起的' : '我参与的';
    
    this.setData({
      tabType,
      tabName
    });
    
    wx.setNavigationBarTitle({
      title: tabName
    });
    
    this.getDocumentsList();
  },
  
  onShow() {
    // 页面显示时刷新列表
    this.setData({
      pageNum: 1,
      hasMoreData: true
    });
    this.getDocumentsList();
  },
  
  // 切换标签
  switchTab(e) {
    const tabType = e.currentTarget.dataset.type;
    const tabName = tabType === 'create' ? '我发起的' : '我参与的';
    
    this.setData({
      tabType,
      tabName,
      pageNum: 1,
      hasMoreData: true,
      documents: []
    });
    
    wx.setNavigationBarTitle({
      title: tabName
    });
    
    this.getDocumentsList();
  },
  
  // 获取文档列表
  getDocumentsList() {
    const openId = wx.getStorageSync('openId');
    if (!openId) {
      console.log('[文档列表] 未找到openId，无法获取文档列表');
      this.setData({ documents: [] });
      return;
    }

    wx.showLoading({
      title: '加载中...',
    });

    // 构造参数
    const params = { 
      openId: openId,
      pageNum: this.data.pageNum,
      pageSize: this.data.pageSize,
      type: this.data.tabType // 'create'表示我发起的，'participate'表示我参与的
    };

    api.article.getList(params)
      .then(res => {
        wx.hideLoading();
        console.log('[文档列表] 成功获取文档列表:', res);
        
        // 格式化数据
        const formattedDocuments = res.map(item => {
          const fileName = item.fileName || '未命名文件';
          // 根据文件类型设置不同的图标
          let iconClass = 'icon-file-unknown';
          if (fileName.endsWith('.pdf')) iconClass = 'icon-pdf';
          if (fileName.endsWith('.doc') || fileName.endsWith('.docx')) iconClass = 'icon-word';

          // 处理头像URL，添加IMG_URL前缀
          const avatarUrl = item.avatarUrl 
            ? IMG_URL + item.avatarUrl 
            : '/assets/images/wxlogo.png'; // 默认头像

          return {
            id: item.id,
            title: fileName,
            date: item.createTime ? item.createTime : '未知日期',
            type: item.type || fileName.split('.').pop().toUpperCase(),
            icon: iconClass,
            fileId: item.fileId,
            signCount: item.signCount || 0,
            signFlag: item.signFlag || 0,
            creatorNickName: item.nickName || '未知用户',
            creatorAvatarUrl: avatarUrl
          };
        });

        // 如果是第一页，直接设置数据；否则追加数据
        if (this.data.pageNum === 1) {
          this.setData({
            documents: formattedDocuments,
            hasMoreData: formattedDocuments.length >= this.data.pageSize
          });
        } else {
          this.setData({
            documents: [...this.data.documents, ...formattedDocuments],
            hasMoreData: formattedDocuments.length >= this.data.pageSize
          });
        }
      })
      .catch(err => {
        wx.hideLoading();
        console.error('[文档列表] 获取文档列表失败', err);
        // 错误处理已在request.js中统一处理
      });
  },
  
  // 打开文档
  openDocument(event) {
    const docId = event.currentTarget.dataset.id;
    const signFlag = event.currentTarget.dataset.signflag;
    console.log('打开文档，ID:', docId, '签名标志:', signFlag);
    
    // 如果是我发起的文档且已经签过名，弹出选择框
    if (this.data.tabType === 'create' && signFlag == 1) {
      wx.showActionSheet({
        itemList: ['预览文档', '重新签名'],
        success: (res) => {
          if (res.tapIndex === 0) {
            // 用户选择"预览文档"
            console.log('用户选择预览文档');
            this.loadDocument(docId, 'preview');
          } else if (res.tapIndex === 1) {
            // 用户选择"重新签名"
            console.log('用户选择重新签名');
            this.loadDocument(docId, 'resign');
          }
        },
        fail: (res) => {
          console.log('用户取消选择', res.errMsg);
        }
      });
    } else if (this.data.tabType === 'create') {
      // 我发起的，且未签名，直接签名
      this.loadDocument(docId, 'sign');
    } else {
      // 我参与的，只能预览
      this.loadDocument(docId, 'preview');
    }
  },
  
  // 加载文档内容
  loadDocument(docId, actionType = 'sign') {
    wx.showLoading({
      title: '加载中...',
    });
    
    // 跳转到PDF查看器，并传递操作类型
    let url = `../pdf-viewer/pdf-viewer?pdfId=${docId}&actionType=${actionType}`;
    
    wx.navigateTo({ 
      url,
      success: () => {
        wx.hideLoading();
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('跳转到PDF查看器失败', err);
        wx.showToast({
          title: '打开文档失败',
          icon: 'none'
        });
      }
    });
  },
  
  // 显示更多操作（仅对我发起的文档有效）
  showMoreActions(e) {
    // 仅对我发起的文档有效
    if (this.data.tabType !== 'create') return;
    
    const { id, title } = e.currentTarget.dataset;
    this.setData({
      showActionSheet: true,
      currentDocId: id,
      currentDocTitle: title
    });
  },
  
  // 隐藏操作菜单
  hideActionSheet() {
    this.setData({
      showActionSheet: false,
      currentDocId: null,
      currentDocTitle: ''
    });
  },
  
  // 删除文档
  deleteDocument() {
    const docId = this.data.currentDocId;
    this.hideActionSheet();

    wx.showLoading({
      title: '删除中...',
    });

    api.article.deleteArticle({ id: docId })
      .then(res => {
        wx.hideLoading();
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        });
        // 刷新列表
        this.setData({
          pageNum: 1,
          hasMoreData: true
        });
        this.getDocumentsList();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('删除失败', err);
      });
  },
  
  // 重命名文档
  renameDocument() {
    this.setData({
      showActionSheet: false,
      showRenameModal: true
    });
  },
  
  // 取消重命名
  onRenameCancel() {
    this.setData({
      showRenameModal: false
    });
  },
  
  // 确认重命名
  onRenameConfirm(e) {
    const newTitle = e.detail.value;
    if (!newTitle) {
      wx.showToast({
        title: '名称不能为空',
        icon: 'none'
      });
      return;
    }

    this.setData({
      showRenameModal: false
    });

    const docId = this.data.currentDocId;
    
    wx.showLoading({
      title: '保存中...',
    });

    api.article.updateArticle({ id: docId, fileName: newTitle })
      .then(res => {
        wx.hideLoading();
        wx.showToast({
          title: '重命名成功',
          icon: 'success'
        });
        // 刷新列表
        this.getDocumentsList();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('重命名失败', err);
      });
  },
  
  // 返回首页
  goToHome() {
    wx.switchTab({
      url: '/pages/index/index'
    });
  },
  
  // 上拉加载更多
  onReachBottom() {
    if (this.data.hasMoreData && !this.data.loadingMore) {
      this.setData({
        loadingMore: true,
        pageNum: this.data.pageNum + 1
      });
      
      this.getDocumentsList().finally(() => {
        this.setData({
          loadingMore: false
        });
      });
    }
  },
  
  // 下拉刷新
  onPullDownRefresh() {
    this.setData({
      pageNum: 1,
      hasMoreData: true
    });
    
    this.getDocumentsList().finally(() => {
      wx.stopPullDownRefresh();
    });
  }
}); 